package 分类.二叉搜索树;
/*
初学者做这题很容易有误区：BST 不是左小右大么，那我只要检查root.val > root.left.val且root.val < root.right.val不就行了？

这样是不对的，因为 BST 左小右大的特性是指root.val要比左子树的所有节点都更大，要比右子树的所有节点都小，你只检查左右两个子节点当然是不够的。

正确解法是通过使用辅助函数，增加函数参数列表，在参数中携带额外信息，将这种约束传递给子树的所有节点
 */
public class 验证二叉搜索树 {
    public boolean isValidBST(TreeNode root) {
       return isValid(root,null,null);

    }
    Boolean isValid(TreeNode root,TreeNode min,TreeNode max){
        if(root==null) return true;
        if(min!=null&&root.val<=min.val) return false;
        if(max!=null&&root.val>=max.val) return false;
        return isValid(root.left,min,root)&&isValid(root.right,root,max);
}

}
